package com.campus.counseling.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.campus.counseling.entity.SysUser;
import com.campus.counseling.model.dto.LoginDTO;
import com.campus.counseling.model.dto.RegisterDTO;
import com.campus.counseling.model.dto.UserDTO;
import com.campus.counseling.model.query.UserQuery;
import com.campus.counseling.model.vo.LoginVO;
import com.campus.counseling.model.vo.UserVO;
import com.campus.counseling.model.dto.ProfileUpdateDTO;
import java.util.List;

public interface SysUserService extends IService<SysUser> {
    LoginVO login(LoginDTO loginDTO);
    void register(RegisterDTO registerDTO);
    SysUser getCurrentUser();
    UserVO getCurrentUserInfo();

    void resetPassword(Long userId, String password);
    /**
     * 退出登录
     */
    void logout();
    /**
     * 分页查询用户列表
     */
    Page<UserVO> getUserPage(UserQuery query);
    /**
     * 添加用户
     */
    void addUser(UserDTO userDTO);
    /**
     * 更新用户
     */
    void updateUser(Long id, UserDTO userDTO);
    /**
     * 删除用户
     */
    void deleteUser(Long id);
    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 用户信息
     */
    SysUser getByUsername(String username);
    /**
     * 更新个人信息
     */
    void updateProfile(Long id, ProfileUpdateDTO profileDTO);
    /**
     * 修改密码
     * @param id 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    void changePassword(Long id, String oldPassword, String newPassword);

    /**
     * 检查邮箱是否已注册
     * @param email 邮箱
     * @return 是否已注册
     */
    boolean existsByEmail(String email);
    /**
     * 通过邮箱重置密码
     * @param email 邮箱
     * @param newPassword 新密码
     */
    void resetPassword(String email, String newPassword);

    /**
     * 获取用户真实姓名
     * @param userId 用户ID
     * @return 真实姓名
     */
    String getRealName(Long userId);
    /**
     * 根据用户名模糊查询获取用户ID列表
     * @param username 用户名
     * @return 用户ID列表
     */
    List<Long> getUserIdsByUsername(String username);
} 